package org.contextsensitivetodo;

import java.util.ArrayList;

import org.contextsensitivetodo.todoview.model.TodoItem;
import org.contextsensitivetodo.todoview.model.TodoItemsSQLiteOpenHelper;

import android.app.Application;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.text.style.TextAppearanceSpan;

import static org.contextsensitivetodo.todoview.model.TodoItemsSQLiteOpenHelper.*;

public class CSTodoApplication extends Application {

	private ArrayList<TodoItem> currentToDos;
	private SQLiteDatabase database;



	@Override
	public void onCreate() {
		super.onCreate();
		TodoItemsSQLiteOpenHelper helper = new TodoItemsSQLiteOpenHelper(this);
		database = helper.getWritableDatabase();
		if(currentToDos ==  null){
			loadtasks();
		}
	}
	
	
	private void loadtasks() {
		currentToDos = new ArrayList<TodoItem>();
		Cursor todoCursor = database.query(TODO_TABLE, new String[]{
			TODO_ID,
			TODO_NAME,
			TODO_COMPLETE
			},null, null, null, null, String.format("%s,%s", TODO_COMPLETE, TODO_NAME));

		todoCursor.moveToFirst();
		TodoItem item;
		if(! todoCursor.isAfterLast()){
			do{
				long id = todoCursor.getLong(0);
				String name = todoCursor.getString(1);
				String boolValue = todoCursor.getString(2);
				boolean complete = Boolean.parseBoolean(boolValue);
				item = new TodoItem();
				item.setId(id);
				item.setName(name);
				item.setComplete(complete);
				
				currentToDos.add(item);
			}while(todoCursor.moveToNext());
		}
		todoCursor.close();
	}


	public void addToDo(TodoItem newItem){
		ContentValues values = new ContentValues();
		values.put(TODO_NAME, newItem.getName());
		values.put(TODO_COMPLETE, ""+newItem.isComplete());
		
		long id = database.insert(TODO_TABLE, null, values);
		
		newItem.setId(id);
		
		this.currentToDos.add(newItem);
		
	}
	
	
	public void saveTodo(TodoItem item){
		ContentValues values = new ContentValues();
		values.put(TODO_NAME, item.getName());
		values.put(TODO_COMPLETE, ""+item.isComplete());
		
		long id = item.getId();
		String where = String.format("%s = %d", TODO_ID, id);
			
		database.update(TODO_TABLE, values, where, null);		
		
	}
	
	
	
	public void deleteTodos(Long[] ids){
		StringBuffer idList = new StringBuffer();
		int i = 0;
		for (Long long1 : ids) {
			idList.append(ids[i]);
			if(i < ids.length -1){
				idList.append(",");	
			}
			++i;
		}
		
		String where = String.format("%s in (%s)", TODO_ID, idList);
		database.delete(TODO_TABLE, where, null);
		
		
		
	}
	
	
	public ArrayList<TodoItem> getCurrentToDos() {
		return currentToDos;
	}
	
	
}
